package com.hspedu.homework.homework06;

/**
 * @Author Stringzhua
 * @Date 2024/3/7 15:31
 * description:
 */
public class Person {
    //    4.有Person类,有name和Vehicles属性,在构造器中为两个属性赋值
    private String name;
    private Vehicles vehicles;
    //在创建人对象时,事先分配一个交通工具

    public Person(String name, Vehicles vehicles) {
        this.name = name;
        this.vehicles = vehicles;
    }

    //5.实例化Person对象"唐僧“,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具
    //这里涉及到一个编程思想:就是可以把具体的要求,封装成方法
    //如何不浪费在构建对象时,传入的交通工具-->判断一下当前的属性是否有对象

    public void passRiver() {
        //step1:先得到船
//        Boat boat=VehiclesFactory.getBoat();
//        boat.work();
        //如何防止使用的始终是传入的马儿【instanceof】
//        if (vehicles == null) {
        //vehicles instanceof Boat 作用是判断当前得到vehicles是不是船
        //(1) vehicles=null -->vehicles instanceof Boat --->false
        //(2) vehicles=马对象 -->vehicles instanceof Boat --->false
        //(3) vehicles=船对象 -->vehicles instanceof Boat --->true
        if (!(vehicles instanceof Boat)) {
            vehicles = VehiclesFactory.getBoat();
        }
        vehicles.work();
    }

    public void common() {
        //得到马儿
        //判断当前的vehicles属性是否已经存在了
        //如果为null,就获取一一匹马
//        if (vehicles == null) {//接口的解耦特性
        if (!(vehicles instanceof Horse)) {
            //这里使用的是多态
            vehicles = VehiclesFactory.getHorse();
        }
        //这里体现接口调用
        vehicles.work();
    }
    //过火焰山乘坐飞机
    public void passFireHill(){
        if (!(vehicles instanceof Plane)) {
            //这里使用的是多态
            vehicles = VehiclesFactory.getPlane();
        }
        //这里体现接口调用
        vehicles.work();
    }
}
